home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d882.lha / GALer / GALer_english / Source / GALerSrcE.lha / Reasm.c < prev    next >
C/C++ Source or Header  |  1992-12-26  |  36KB  |  1,238 lines

  1. /****************************************************************/
  2. /*                                */
  3. /* Reasm.c -- enthält den Reassembler, der aus der Jedec-Datei    */
  4. /* wieder ein Source-File (.pld) erstellt.            */
  5. /*                                */
  6. /* compilieren: cc Reasm.c                    */
  7. /*                                */
  8. /****************************************************************/
  9.  
  10.  
  11. #include <exec/memory.h>
  12. #include <libraries/dos.h>
  13. #include <intuition/intuition.h>
  14. #include <ctype.h>
  15. #include <functions.h>
  16.  
  17. #include "GALer.h"
  18.  
  19.  
  20. extern    char    path[];
  21. extern    int    JedecGALType;
  22. extern    char    filename[];            /*Puffer für Filenamen*/
  23. extern    struct    JedecStruct    Jedec;
  24. extern    struct    Window        *window;
  25.  
  26.  
  27. int FuseToPin16Mode1[] = { 2,1,3,19,4,18,5,17,6,14,7,13,8,12,9,11 };
  28. int FuseToPin16Mode2[] = { 2,1,3,18,4,17,5,16,6,15,7,14,8,13,9,11 };
  29. int FuseToPin16Mode3[] = { 2,19,3,18,4,17,5,16,6,15,7,14,8,13,9,12 };
  30.  
  31. int FuseToPin20Mode1[] = { 2,1,3,23,4,22,5,21,6,20,7,17,8,16,9,15,10,14,11,13 };
  32. int FuseToPin20Mode2[] = { 2,1,3,23,4,21,5,20,6,19,7,18,8,17,9,16,10,14,11,13 };
  33. int FuseToPin20Mode3[] = { 2,23,3,22,4,21,5,20,6,19,7,18,8,17,9,16,10,15,11,14 };
  34.  
  35.  
  36.  
  37. SHORT RBorderVec1a[] = { 0,14,77,14,77,0 };
  38. SHORT RBorderVec1b[] = { 0,14,0,0,77,0 };
  39.  
  40. SHORT RBorderVec2a[] = { 0,9,83,9,83,0 };
  41. SHORT RBorderVec2b[] = { 0,9,0,0,83,0 };
  42.  
  43. SHORT RBorderVec3a[] = { 0,11,51,11,51,0 };
  44. SHORT RBorderVec3b[] = { 0,11,0,0,51,0 };
  45.  
  46. SHORT PinNameBorVeca[]  = { 0,179,309,179,309,0 };
  47. SHORT PinNameBorVecb[]  = { 0,179,0,0,309,0 };
  48.  
  49. struct Border RBorder1b = { -1,-1,2,0,JAM1,3,RBorderVec1b,NULL };
  50. struct Border RBorder1a = { -1,-1,1,0,JAM1,3,RBorderVec1a,&RBorder1b };
  51.  
  52. struct Border RBorder2b = { -1,-1,2,0,JAM1,3,RBorderVec2b,NULL };
  53. struct Border RBorder2a = { -1,-1,1,0,JAM1,3,RBorderVec2a,&RBorder2b };
  54.  
  55. struct Border RBorder3b = { -1,-1,2,0,JAM1,3,RBorderVec3b,NULL };
  56. struct Border RBorder3a = { -1,-1,1,0,JAM1,3,RBorderVec3a,&RBorder3b };
  57.  
  58. struct Border PinNameBorderb = { 0,0,2,0,JAM1,3,PinNameBorVecb,NULL };
  59. struct Border PinNameBordera = { 0,0,1,0,JAM1,3,PinNameBorVeca,&PinNameBorderb};
  60.  
  61.  
  62.  
  63. struct IntuiText RIText27 = { 1,0,JAM1,10,7,NULL,(UBYTE *)"Pinnames:",NULL };
  64.  
  65. struct IntuiText RIText26 = { 1,0,JAM1,10,3,NULL,(UBYTE *)"Cancel",NULL };
  66. struct IntuiText RIText25 = { 1,0,JAM1,15,3,NULL,(UBYTE *)" Cont",NULL };
  67. struct IntuiText RIText30 = { 1,0,JAM1,5,1,NULL,(UBYTE *)" Set",NULL };
  68. struct IntuiText RIText31 = { 1,0,JAM1,5,1,NULL,(UBYTE *)"Clear",NULL };
  69. struct IntuiText RIText29 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"12",NULL };
  70. struct IntuiText RIText28 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"11",NULL };
  71.  
  72. struct IntuiText RIText24 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"24",NULL };
  73. struct IntuiText RIText23 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"23",NULL };
  74. struct IntuiText RIText22 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"22",NULL };
  75. struct IntuiText RIText21 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"21",NULL };
  76. struct IntuiText RIText20 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"20",NULL };
  77. struct IntuiText RIText19 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"19",NULL };
  78. struct IntuiText RIText18 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"18",NULL };
  79. struct IntuiText RIText17 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"17",NULL };
  80. struct IntuiText RIText16 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"16",NULL };
  81. struct IntuiText RIText15 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"15",NULL };
  82. struct IntuiText RIText14 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"14",NULL };
  83. struct IntuiText RIText13 = { 1,0,JAM1,-22,0,NULL,(UBYTE *)"13",NULL };
  84. struct IntuiText RIText12 = { 1,0,JAM1, 89,0,NULL,(UBYTE *)"12",NULL };
  85. struct IntuiText RIText11 = { 1,0,JAM1, 89,0,NULL,(UBYTE *)"11",NULL };
  86. struct IntuiText RIText10 = { 1,0,JAM1, 89,0,NULL,(UBYTE *)"10",NULL };
  87. struct IntuiText RIText9  = { 1,0,JAM1, 97,0,NULL,(UBYTE *)"9", NULL };
  88. struct IntuiText RIText8  = { 1,0,JAM1, 97,0,NULL,(UBYTE *)"8", NULL };
  89. struct IntuiText RIText7  = { 1,0,JAM1, 97,0,NULL,(UBYTE *)"7", NULL };
  90. struct IntuiText RIText6  = { 1,0,JAM1, 97,0,NULL,(UBYTE *)"6", NULL };
  91. struct IntuiText RIText5  = { 1,0,JAM1,    97,0,NULL,(UBYTE *)"5", NULL };
  92. struct IntuiText RIText4  = { 1,0,JAM1,    97,0,NULL,(UBYTE *)"4", NULL };
  93. struct IntuiText RIText3  = { 1,0,JAM1, 97,0,NULL,(UBYTE *)"3", NULL };
  94. struct IntuiText RIText2  = { 1,0,JAM1,    97,0,NULL,(UBYTE *)"2", NULL };
  95. struct IntuiText RIText1  = { 1,0,JAM1, 97,0,NULL,(UBYTE *)"1", NULL };
  96.  
  97.  
  98.  
  99. UBYTE PinNames16[20][10] = { "A","B","C","D","E","F","G","H","I","GND",
  100.                  "J","K","L","M","N","O","P","Q","R","VCC" };
  101. UBYTE PinNames20[24][10] = { "A","B","C","D","E","F","G","H","I","J","K","GND",
  102.                  "L","M","N","O","P","Q","R","S","T","U","V","VCC" };
  103.  
  104.  
  105. struct StringInfo R16Gad24SInfo = { PinNames16[23],NULL,0,10,0,
  106.                     0,0,0,0,0,0,0,NULL };
  107.  
  108. struct StringInfo R16Gad23SInfo = { PinNames16[22],NULL,0,10,0,
  109.                     0,0,0,0,0,0,0,NULL };
  110.  
  111. struct StringInfo R16Gad22SInfo = { PinNames16[21],NULL,0,10,0,
  112.                     0,0,0,0,0,0,0,NULL };
  113.  
  114. struct StringInfo R16Gad21SInfo = { PinNames16[20],NULL,0,10,0,
  115.                     0,0,0,0,0,0,0,NULL };
  116.  
  117. struct StringInfo R16Gad20SInfo = { PinNames16[19],NULL,0,10,0,
  118.                     0,0,0,0,0,0,0,NULL };
  119.  
  120. struct StringInfo R16Gad19SInfo = { PinNames16[18],NULL,0,10,0,
  121.                     0,0,0,0,0,0,0,NULL };
  122.  
  123. struct StringInfo R16Gad18SInfo = { PinNames16[17],NULL,0,10,0,
  124.                     0,0,0,0,0,0,0,NULL };
  125.  
  126. struct StringInfo R16Gad17SInfo = { PinNames16[16],NULL,0,10,0,
  127.                     0,0,0,0,0,0,0,NULL };
  128.  
  129. struct StringInfo R16Gad16SInfo = { PinNames16[15],NULL,0,10,0,
  130.                     0,0,0,0,0,0,0,NULL };
  131.  
  132. struct StringInfo R16Gad15SInfo = { PinNames16[14],NULL,0,10,0,
  133.                     0,0,0,0,0,0,0,NULL };
  134.  
  135. struct StringInfo R16Gad14SInfo = { PinNames16[13],NULL,0,10,0,
  136.                     0,0,0,0,0,0,0,NULL };
  137.  
  138. struct StringInfo R16Gad13SInfo = { PinNames16[12],NULL,0,10,0,
  139.                     0,0,0,0,0,0,0,NULL };
  140.  
  141. struct StringInfo R16Gad12SInfo = { PinNames16[11],NULL,0,10,0,
  142.                     0,0,0,0,0,0,0,NULL };
  143.  
  144. struct StringInfo R16Gad11SInfo = { PinNames16[10],NULL,0,10,0,
  145.                     0,0,0,0,0,0,0,NULL };
  146.  
  147. struct StringInfo R16Gad10SInfo = { PinNames16[9],NULL,0,10,0,
  148.                     0,0,0,0,0,0,0,NULL };
  149.  
  150. struct StringInfo R16Gad9SInfo  = { PinNames16[8],NULL,0,10,0,
  151.                     0,0,0,0,0,0,0,NULL };
  152.  
  153. struct StringInfo R16Gad8SInfo  = { PinNames16[7],NULL,0,10,0,
  154.                     0,0,0,0,0,0,0,NULL };
  155.  
  156. struct StringInfo R16Gad7SInfo  = { PinNames16[6],NULL,0,10,0,
  157.                     0,0,0,0,0,0,0,NULL };
  158.  
  159. struct StringInfo R16Gad6SInfo  = { PinNames16[5],NULL,0,10,0,
  160.                     0,0,0,0,0,0,0,NULL };
  161.  
  162. struct StringInfo R16Gad5SInfo  = { PinNames16[4],NULL,0,10,0,
  163.                     0,0,0,0,0,0,0,NULL };
  164.  
  165. struct StringInfo R16Gad4SInfo  = { PinNames16[3],NULL,0,10,0,
  166.                     0,0,0,0,0,0,0,NULL };
  167.  
  168. struct StringInfo R16Gad3SInfo  = { PinNames16[2],NULL,0,10,0,
  169.                     0,0,0,0,0,0,0,NULL };
  170.  
  171. struct StringInfo R16Gad2SInfo  = { PinNames16[1],NULL,0,10,0,
  172.                     0,0,0,0,0,0,0,NULL };
  173.  
  174. struct StringInfo R16Gad1SInfo  = { PinNames16[0],NULL,0,10,0,
  175.                     0,0,0,0,0,0,0,NULL };
  176.  
  177.  
  178. struct StringInfo R20Gad24SInfo = { PinNames20[23],NULL,0,10,0,
  179.                     0,0,0,0,0,0,0,NULL };
  180.  
  181. struct StringInfo R20Gad23SInfo = { PinNames20[22],NULL,0,10,0,
  182.                     0,0,0,0,0,0,0,NULL };
  183.  
  184. struct StringInfo R20Gad22SInfo = { PinNames20[21],NULL,0,10,0,
  185.                     0,0,0,0,0,0,0,NULL };
  186.  
  187. struct StringInfo R20Gad21SInfo = { PinNames20[20],NULL,0,10,0,
  188.                     0,0,0,0,0,0,0,NULL };
  189.  
  190. struct StringInfo R20Gad20SInfo = { PinNames20[19],NULL,0,10,0,
  191.                     0,0,0,0,0,0,0,NULL };
  192.  
  193. struct StringInfo R20Gad19SInfo = { PinNames20[18],NULL,0,10,0,
  194.                     0,0,0,0,0,0,0,NULL };
  195.  
  196. struct StringInfo R20Gad18SInfo = { PinNames20[17],NULL,0,10,0,
  197.                     0,0,0,0,0,0,0,NULL };
  198.  
  199. struct StringInfo R20Gad17SInfo = { PinNames20[16],NULL,0,10,0,
  200.                     0,0,0,0,0,0,0,NULL };
  201.  
  202. struct StringInfo R20Gad16SInfo = { PinNames20[15],NULL,0,10,0,
  203.                     0,0,0,0,0,0,0,NULL };
  204.  
  205. struct StringInfo R20Gad15SInfo = { PinNames20[14],NULL,0,10,0,
  206.                     0,0,0,0,0,0,0,NULL };
  207.  
  208. struct StringInfo R20Gad14SInfo = { PinNames20[13],NULL,0,10,0,
  209.                     0,0,0,0,0,0,0,NULL };
  210.  
  211. struct StringInfo R20Gad13SInfo = { PinNames20[12],NULL,0,10,0,
  212.                     0,0,0,0,0,0,0,NULL };
  213.  
  214. struct StringInfo R20Gad12SInfo = { PinNames20[11],NULL,0,10,0,
  215.                     0,0,0,0,0,0,0,NULL };
  216.  
  217. struct StringInfo R20Gad11SInfo = { PinNames20[10],NULL,0,10,0,
  218.                     0,0,0,0,0,0,0,NULL };
  219.  
  220. struct StringInfo R20Gad10SInfo = { PinNames20[9],NULL,0,10,0,
  221.                     0,0,0,0,0,0,0,NULL };
  222.  
  223. struct StringInfo R20Gad9SInfo  = { PinNames20[8],NULL,0,10,0,
  224.                     0,0,0,0,0,0,0,NULL };
  225.  
  226. struct StringInfo R20Gad8SInfo  = { PinNames20[7],NULL,0,10,0,
  227.                     0,0,0,0,0,0,0,NULL };
  228.  
  229. struct StringInfo R20Gad7SInfo  = { PinNames20[6],NULL,0,10,0,
  230.                     0,0,0,0,0,0,0,NULL };
  231.  
  232. struct StringInfo R20Gad6SInfo  = { PinNames20[5],NULL,0,10,0,
  233.                     0,0,0,0,0,0,0,NULL };
  234.  
  235. struct StringInfo R20Gad5SInfo  = { PinNames20[4],NULL,0,10,0,
  236.                     0,0,0,0,0,0,0,NULL };
  237.  
  238. struct StringInfo R20Gad4SInfo  = { PinNames20[3],NULL,0,10,0,
  239.                     0,0,0,0,0,0,0,NULL };
  240.  
  241. struct StringInfo R20Gad3SInfo  = { PinNames20[2],NULL,0,10,0,
  242.                     0,0,0,0,0,0,0,NULL };
  243.  
  244. struct StringInfo R20Gad2SInfo  = { PinNames20[1],NULL,0,10,0,
  245.                     0,0,0,0,0,0,0,NULL };
  246.  
  247. struct StringInfo R20Gad1SInfo  = { PinNames20[0],NULL,0,10,0,
  248.                     0,0,0,0,0,0,0,NULL };
  249.  
  250.  
  251. /*ACHTUNG: zwischen R16/20Gad1 und R16/20Gad24 dürfen keine neuen Gadgets
  252.        hinzugefügt werden und an R16/20Gad24 keine angehängt werden!
  253. */
  254.  
  255.  
  256. struct Gadget R16Gad20 = { NULL,192,21,82,8,NULL,
  257.                RELVERIFY,STRGADGET|REQGADGET,
  258.                (APTR)&RBorder2a,NULL,&RIText20,NULL,
  259.                (APTR)&R16Gad20SInfo,20,NULL };
  260.  
  261. struct Gadget R16Gad19 = { &R16Gad20,192,32,82,8,NULL,
  262.                RELVERIFY,STRGADGET|REQGADGET,
  263.                (APTR)&RBorder2a,NULL,&RIText19,NULL,
  264.                (APTR)&R16Gad19SInfo,19,NULL };
  265.  
  266. struct Gadget R16Gad18 = { &R16Gad19,192,43,82,8,NULL,
  267.                RELVERIFY,STRGADGET|REQGADGET,
  268.                (APTR)&RBorder2a,NULL,&RIText18,NULL,
  269.                (APTR)&R16Gad18SInfo,18,NULL };
  270.  
  271. struct Gadget R16Gad17 = { &R16Gad18,192,54,82,8,NULL,
  272.                RELVERIFY,STRGADGET|REQGADGET,
  273.                (APTR)&RBorder2a,NULL,&RIText17,NULL,
  274.                (APTR)&R16Gad17SInfo,17,NULL };
  275.  
  276. struct Gadget R16Gad16 = { &R16Gad17,192,65,82,8,NULL,
  277.                RELVERIFY,STRGADGET|REQGADGET,
  278.                (APTR)&RBorder2a,NULL,&RIText16,NULL,
  279.                (APTR)&R16Gad16SInfo,16,NULL };
  280.  
  281. struct Gadget R16Gad15 = { &R16Gad16,192,76,82,8,NULL,
  282.                RELVERIFY,STRGADGET|REQGADGET,
  283.                (APTR)&RBorder2a,NULL,&RIText15,NULL,
  284.                (APTR)&R16Gad15SInfo,15,NULL };
  285.  
  286. struct Gadget R16Gad14 = { &R16Gad15,192,87,82,8,NULL,
  287.                RELVERIFY,STRGADGET|REQGADGET,
  288.                (APTR)&RBorder2a,NULL,&RIText14,NULL,
  289.                (APTR)&R16Gad14SInfo,14,NULL };
  290.  
  291. struct Gadget R16Gad13 = { &R16Gad14,192,98,82,8,NULL,
  292.                RELVERIFY,STRGADGET|REQGADGET,
  293.                (APTR)&RBorder2a,NULL,&RIText13,NULL,
  294.                (APTR)&R16Gad13SInfo,13,NULL };
  295.  
  296. struct Gadget R16Gad12 = { &R16Gad13,192,109,82,8,NULL,
  297.                RELVERIFY,STRGADGET|REQGADGET,
  298.                (APTR)&RBorder2a,NULL,&RIText29,NULL,
  299.                (APTR)&R16Gad12SInfo,12,NULL };
  300.  
  301. struct Gadget R16Gad11 = { &R16Gad12,192,120,82,8,NULL,
  302.                RELVERIFY,STRGADGET|REQGADGET,
  303.                (APTR)&RBorder2a,NULL,&RIText28,NULL,
  304.                (APTR)&R16Gad11SInfo,11,NULL };
  305.  
  306. struct Gadget R16Gad10 = { &R16Gad11,36,120,82,8,NULL,
  307.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  308.                (APTR)&RBorder2a,NULL,&RIText10,NULL,
  309.                (APTR)&R16Gad10SInfo,10,NULL };
  310.  
  311. struct Gadget R16Gad9  = { &R16Gad10,36,109,82,8,NULL,
  312.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  313.                (APTR)&RBorder2a,NULL,&RIText9,NULL,
  314.                (APTR)&R16Gad9SInfo,9,NULL };
  315.  
  316. struct Gadget R16Gad8  = { &R16Gad9,36,98,82,8,NULL,
  317.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  318.                (APTR)&RBorder2a,NULL,&RIText8,NULL,
  319.                (APTR)&R16Gad8SInfo,8,NULL };
  320.  
  321. struct Gadget R16Gad7  = { &R16Gad8,36,87,82,8,NULL,
  322.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  323.                (APTR)&RBorder2a,NULL,&RIText7,NULL,
  324.                (APTR)&R16Gad7SInfo,7,NULL };
  325.  
  326. struct Gadget R16Gad6  = { &R16Gad7,36,76,82,8,NULL,
  327.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  328.                (APTR)&RBorder2a,NULL,&RIText6,NULL,
  329.                (APTR)&R16Gad6SInfo,6,NULL };
  330.  
  331. struct Gadget R16Gad5  = { &R16Gad6,36,65,82,8,NULL,
  332.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  333.                (APTR)&RBorder2a,NULL,&RIText5,NULL,
  334.                (APTR)&R16Gad5SInfo,5,NULL };
  335.  
  336. struct Gadget R16Gad4  = { &R16Gad5,36,54,82,8,NULL,
  337.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  338.                (APTR)&RBorder2a,NULL,&RIText4,NULL,
  339.                (APTR)&R16Gad4SInfo,4,NULL };
  340.  
  341. struct Gadget R16Gad3  = { &R16Gad4,36,43,82,8,NULL,
  342.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  343.                (APTR)&RBorder2a,NULL,&RIText3,NULL,
  344.                (APTR)&R16Gad3SInfo,3,NULL };
  345.  
  346. struct Gadget R16Gad2  = { &R16Gad3,36,32,82,8,NULL,
  347.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  348.                (APTR)&RBorder2a,NULL,&RIText2,NULL,
  349.                (APTR)&R16Gad2SInfo,2,NULL };
  350.  
  351. struct Gadget R16Gad1  = { &R16Gad2,36,21,82,8,NULL,
  352.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  353.                (APTR)&RBorder2a,NULL,&RIText1,NULL,
  354.                (APTR)&R16Gad1SInfo,1,NULL };
  355.  
  356.  
  357.  
  358. struct Gadget R20Gad24 = { NULL,192,21,82,8,NULL,
  359.                RELVERIFY,STRGADGET|REQGADGET,
  360.                (APTR)&RBorder2a,NULL,&RIText24,NULL,
  361.                (APTR)&R20Gad24SInfo,24,NULL };
  362.  
  363. struct Gadget R20Gad23 = { &R20Gad24,192,32,82,8,NULL,
  364.                RELVERIFY,STRGADGET|REQGADGET,
  365.                (APTR)&RBorder2a,NULL,&RIText23,NULL,
  366.                (APTR)&R20Gad23SInfo,23,NULL };
  367.  
  368. struct Gadget R20Gad22 = { &R20Gad23,192,43,82,8,NULL,
  369.                RELVERIFY,STRGADGET|REQGADGET,
  370.                (APTR)&RBorder2a,NULL,&RIText22,NULL,
  371.                (APTR)&R20Gad22SInfo,22,NULL };
  372.  
  373. struct Gadget R20Gad21 = { &R20Gad22,192,54,82,8,NULL,
  374.                RELVERIFY,STRGADGET|REQGADGET,
  375.                (APTR)&RBorder2a,NULL,&RIText21,NULL,
  376.                (APTR)&R20Gad21SInfo,21,NULL };
  377.  
  378. struct Gadget R20Gad20 = { &R20Gad21,192,65,82,8,NULL,
  379.                RELVERIFY,STRGADGET|REQGADGET,
  380.                (APTR)&RBorder2a,NULL,&RIText20,NULL,
  381.                (APTR)&R20Gad20SInfo,20,NULL };
  382.  
  383. struct Gadget R20Gad19 = { &R20Gad20,192,76,82,8,NULL,
  384.                RELVERIFY,STRGADGET|REQGADGET,
  385.                (APTR)&RBorder2a,NULL,&RIText19,NULL,
  386.                (APTR)&R20Gad19SInfo,19,NULL };
  387.  
  388. struct Gadget R20Gad18 = { &R20Gad19,192,87,82,8,NULL,
  389.                RELVERIFY,STRGADGET|REQGADGET,
  390.                (APTR)&RBorder2a,NULL,&RIText18,NULL,
  391.                (APTR)&R20Gad18SInfo,18,NULL };
  392.  
  393. struct Gadget R20Gad17 = { &R20Gad18,192,98,82,8,NULL,
  394.                RELVERIFY,STRGADGET|REQGADGET,
  395.                (APTR)&RBorder2a,NULL,&RIText17,NULL,
  396.                (APTR)&R20Gad17SInfo,17,NULL };
  397.  
  398. struct Gadget R20Gad16 = { &R20Gad17,192,109,82,8,NULL,
  399.                RELVERIFY,STRGADGET|REQGADGET,
  400.                (APTR)&RBorder2a,NULL,&RIText16,NULL,
  401.                (APTR)&R20Gad16SInfo,16,NULL };
  402.  
  403. struct Gadget R20Gad15 = { &R20Gad16,192,120,82,8,NULL,
  404.                RELVERIFY,STRGADGET|REQGADGET,
  405.                (APTR)&RBorder2a,NULL,&RIText15,NULL,
  406.                (APTR)&R20Gad15SInfo,15,NULL };
  407.  
  408. struct Gadget R20Gad14 = { &R20Gad15,192,131,82,8,NULL,
  409.                RELVERIFY,STRGADGET|REQGADGET,
  410.                (APTR)&RBorder2a,NULL,&RIText14,NULL,
  411.                (APTR)&R20Gad14SInfo,14,NULL };
  412.  
  413. struct Gadget R20Gad13 = { &R20Gad14,192,142,82,8,NULL,
  414.                RELVERIFY,STRGADGET|REQGADGET,
  415.                (APTR)&RBorder2a,NULL,&RIText13,NULL,
  416.                (APTR)&R20Gad13SInfo,13,NULL };
  417.  
  418. struct Gadget R20Gad12 = { &R20Gad13,36,142,82,8,NULL,
  419.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  420.                (APTR)&RBorder2a,NULL,&RIText12,NULL,
  421.                (APTR)&R20Gad12SInfo,12,NULL };
  422.  
  423. struct Gadget R20Gad11 = { &R20Gad12,36,131,82,8,NULL,
  424.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  425.                (APTR)&RBorder2a,NULL,&RIText11,NULL,
  426.                (APTR)&R20Gad11SInfo,11,NULL };
  427.  
  428. struct Gadget R20Gad10 = { &R20Gad11,36,120,82,8,NULL,
  429.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  430.                (APTR)&RBorder2a,NULL,&RIText10,NULL,
  431.                (APTR)&R20Gad10SInfo,10,NULL };
  432.  
  433. struct Gadget R20Gad9  = { &R20Gad10,36,109,82,8,NULL,
  434.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  435.                (APTR)&RBorder2a,NULL,&RIText9,NULL,
  436.                (APTR)&R20Gad9SInfo,9,NULL };
  437.  
  438. struct Gadget R20Gad8  = { &R20Gad9,36,98,82,8,NULL,
  439.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  440.                (APTR)&RBorder2a,NULL,&RIText8,NULL,
  441.                (APTR)&R20Gad8SInfo,8,NULL };
  442.  
  443. struct Gadget R20Gad7  = { &R20Gad8,36,87,82,8,NULL,
  444.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  445.                (APTR)&RBorder2a,NULL,&RIText7,NULL,
  446.                (APTR)&R20Gad7SInfo,7,NULL };
  447.  
  448. struct Gadget R20Gad6  = { &R20Gad7,36,76,82,8,NULL,
  449.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  450.                (APTR)&RBorder2a,NULL,&RIText6,NULL,
  451.                (APTR)&R20Gad6SInfo,6,NULL };
  452.  
  453. struct Gadget R20Gad5  = { &R20Gad6,36,65,82,8,NULL,
  454.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  455.                (APTR)&RBorder2a,NULL,&RIText5,NULL,
  456.                (APTR)&R20Gad5SInfo,5,NULL };
  457.  
  458. struct Gadget R20Gad4  = { &R20Gad5,36,54,82,8,NULL,
  459.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  460.                (APTR)&RBorder2a,NULL,&RIText4,NULL,
  461.                (APTR)&R20Gad4SInfo,4,NULL };
  462.  
  463. struct Gadget R20Gad3  = { &R20Gad4,36,43,82,8,NULL,
  464.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  465.                (APTR)&RBorder2a,NULL,&RIText3,NULL,
  466.                (APTR)&R20Gad3SInfo,3,NULL };
  467.  
  468. struct Gadget R20Gad2  = { &R20Gad3,36,32,82,8,NULL,
  469.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  470.                (APTR)&RBorder2a,NULL,&RIText2,NULL,
  471.                (APTR)&R20Gad2SInfo,2,NULL };
  472.  
  473. struct Gadget R20Gad1  = { &R20Gad2,36,21,82,8,NULL,
  474.                RELVERIFY|STRINGRIGHT,STRGADGET|REQGADGET,
  475.                (APTR)&RBorder2a,NULL,&RIText1,NULL,
  476.                (APTR)&R20Gad1SInfo,1,NULL };
  477.  
  478.  
  479. /* An RGadget4 keinen neuen Gadgets anhängen - oder Programm entsprechen
  480.    ändern.
  481. */
  482. struct Gadget RGadget4  = { NULL,130,155,50,10,NULL,
  483.                 RELVERIFY,BOOLGADGET|REQGADGET,
  484.                 (APTR)&RBorder3a,NULL,&RIText31,NULL,
  485.                 NULL,28,NULL };
  486.  
  487. struct Gadget RGadget3  = { &RGadget4,130,167,50,10,NULL,
  488.                 RELVERIFY,BOOLGADGET|REQGADGET,
  489.                 (APTR)&RBorder3a,NULL,&RIText30,NULL,
  490.                 NULL,27,NULL };
  491.  
  492. struct Gadget RGadget2  = { &RGadget3,209,161,76,13,NULL,
  493.                 RELVERIFY,BOOLGADGET|REQGADGET,
  494.                 (APTR)&RBorder1a,NULL,&RIText26,NULL,
  495.                 NULL,26,NULL };
  496.  
  497. struct Gadget RGadget1  = { &RGadget2,25,161,76,13,NULL,
  498.                 RELVERIFY,BOOLGADGET|REQGADGET,
  499.                 (APTR)&RBorder1a,NULL,&RIText25,NULL,
  500.                 NULL,25,NULL };
  501.  
  502.  
  503.  
  504. struct Requester PinNameReq = { NULL,165,2,310,180,0,0,
  505.                 &RGadget1,&PinNameBordera,&RIText27,
  506.                 NOISYREQ,3,NULL,NULL,NULL };
  507.  
  508.  
  509.  
  510.  
  511. /* CheckPinNames: Pinnamen überprüfen
  512.    Aufruf: result = CheckPinNames();
  513.        JedecGALType muß den GAL-Typ enthalten
  514.    Ergebnis:  result = 0 : alles o.k.
  515.                 sonst: entsprechende Fehlernummer
  516. */
  517. int CheckPinNames()
  518. {
  519. UBYTE    *ptr, *pinnames;
  520. int    numofpins, i, j, l, n;
  521.  
  522.  
  523.  if (JedecGALType == GAL16V8) {
  524.    numofpins = 20;
  525.    pinnames  = PinNames16[0];
  526.  }
  527.  else {
  528.    numofpins = 24;
  529.    pinnames  = PinNames20[0];
  530.  }
  531.  
  532.                     /*Pinnamen überprüfen*/
  533.  for (n=0; n<numofpins; n++) {
  534.    ptr = pinnames+n*10;                /*überprüfen ob Pinname aus*/
  535.    if (*ptr == '/')                /*gültigen Zeichen besteht*/
  536.      ptr++;
  537.    if (!*ptr) {                    /*kein Zeichen da?->Fehler*/
  538.      ReasmError(4,n+1);
  539.      return(4);
  540.    }
  541.    while (isalpha(*ptr) || isdigit(*ptr))
  542.      ptr++;
  543.    if (*ptr == '/') {
  544.      ReasmError(6,n+1);
  545.      return(6);
  546.    }
  547.    if (*ptr) {
  548.      ReasmError(3,n+1);
  549.      return(3);
  550.    }
  551.  
  552.    for (l=0; l<n; l++) {            /*Pinname doppelt?*/
  553.      if (strcmp(pinnames+l*10,(UBYTE *)"NC")) {
  554.        i = j = 0;
  555.        if (*(pinnames+l*10) == '/') i = 1;
  556.        if (*(pinnames+n*10) == '/') j = 1;
  557.        if (!strcmp(pinnames+l*10+i,pinnames+n*10+j)) {
  558.      ReasmError(2,n+1);
  559.      return(2);
  560.        }
  561.      }
  562.    }
  563.                     /*GND an entsprechenden Pin?*/
  564.    if (!strcmp(pinnames+n*10,(UBYTE *)"GND")) {
  565.      if (n+1 != numofpins/2) {
  566.        ReasmError(5,n+1);
  567.        return(5);
  568.      }
  569.    }
  570.    if (n+1 == numofpins/2) {
  571.      if (strcmp(pinnames+n*10,(UBYTE *)"GND")) {
  572.        ReasmError(7,n+1);
  573.        return(5);
  574.      }
  575.    }
  576.                     /*VCC an entsprechenden Pin?*/
  577.    if (!strcmp(pinnames+n*10,(UBYTE *)"VCC")) {
  578.      if (n+1 != numofpins) {
  579.        ReasmError(5,n+1);
  580.        return(5);
  581.      }
  582.    }
  583.    if (n+1 == numofpins) {
  584.      if (strcmp(pinnames+n*10,(UBYTE *)"VCC")) {
  585.        ReasmError(8,n+1);
  586.        return(5);
  587.      }
  588.     }
  589.   }
  590.  
  591.  return(0);
  592. }
  593.  
  594.  
  595.  
  596.  
  597. /* PinNameRequster: Läßt Requester erscheinen, in dem die Pinnamen
  598.             für den Reassembler eingegeben werden können
  599.    Aufruf   : result = PinNameRequester(galtype);
  600.    Parameter: galtype: GAL16V8 oder GAL20V8
  601.    Ergebnis : result = 0: Weiter angewählt
  602.              = 1: Abbruch angewählt oder Fehler
  603. */
  604. int PinNameRequester(galtype)
  605. int galtype;
  606. {
  607. struct    IntuiMessage    *imsg;
  608. struct    Gadget        *gadget;
  609. ULONG    class;
  610. USHORT    code,gadID;
  611. UBYTE    *pinnames;
  612. int    n, numofpins;
  613. char    name[2];
  614.  
  615.  if (galtype == GAL16V8) {
  616.    RGadget4.NextGadget = &R16Gad1; 
  617.    pinnames  = PinNames16[0];
  618.    numofpins = 20;
  619.  }
  620.  else {
  621.    RGadget4.NextGadget = &R20Gad1; 
  622.    pinnames  = PinNames20[0];
  623.    numofpins = 24;
  624.  }
  625.  
  626.  
  627.  if (Request(&PinNameReq,window)) {
  628.    for (n=0; n<5; n++) {            /*Pin 1-Gadget aktivieren*/
  629.      if (JedecGALType == GAL16V8)
  630.        if (ActivateGadget(&R16Gad1,window,&PinNameReq))
  631.      break;
  632.      if (JedecGALType == GAL20V8)
  633.        if (ActivateGadget(&R20Gad1,window,&PinNameReq))
  634.      break;
  635.    }
  636.  
  637.    for (;;) {
  638.      imsg = (struct IntuiMessage *) GetMsg(window->UserPort); 
  639.      if (!imsg) WaitPort (window->UserPort);
  640.      else {
  641.        class = imsg->Class;
  642.        code  = imsg->Code;
  643.        if (class==GADGETUP) {
  644.      gadget = (struct Gadget *)imsg->IAddress;
  645.          gadID=gadget->GadgetID;
  646.        }
  647.        ReplyMsg(imsg);
  648.        if (class == VANILLAKEY) {
  649.      if (code == 'w') {                /*Weiter*/
  650.        if (!CheckPinNames()) {
  651.          EndRequest(&PinNameReq,window);
  652.          return(0);
  653.        }
  654.      }
  655.      if (code == 'a') {                /*Abbruch*/
  656.        EndRequest(&PinNameReq,window);
  657.        return(1);
  658.      }
  659.        }
  660.        if (class == GADGETUP) {
  661.      if (gadID == 25) {                /*Weiter*/
  662.        if (!CheckPinNames()) {
  663.          EndRequest(&PinNameReq,window);
  664.          return(0);
  665.        }
  666.      }
  667.  
  668.      if (gadID == 26) {                /*Abbruch*/
  669.        EndRequest(&PinNameReq,window);
  670.        return(1);
  671.      }
  672.  
  673.      if (gadID == 27) {                /*Set*/
  674.        name[0] = 'A';
  675.        name[1] = 0x00;
  676.        for (n=0; n<numofpins; n++) {
  677.          if (n+1 == numofpins/2) {
  678.            strcpy (pinnames+(long)(n*10),"GND");
  679.            continue;
  680.          }
  681.          if (n+1 == numofpins) {
  682.            strcpy (pinnames+(long)(n*10),"VCC");
  683.            continue;
  684.          }
  685.          strcpy (pinnames+(long)(n*10),name);
  686.          name[0]++;
  687.        }
  688.        if (galtype == GAL16V8)
  689.          RefreshGadgets(&R16Gad1,window,&PinNameReq);
  690.        else
  691.          RefreshGadgets(&R20Gad1,window,&PinNameReq);
  692.      }
  693.  
  694.      if (gadID == 28) {                /*Clear*/
  695.        for (n=0; n<numofpins; n++) {
  696.          if ((n+1 != numofpins) && (n+1 != numofpins/2))
  697.            *(pinnames+(long)(n*10)) = 0;
  698.        }
  699.        if (galtype == GAL16V8)
  700.          RefreshGadgets(&R16Gad1,window,&PinNameReq);
  701.        else
  702.          RefreshGadgets(&R20Gad1,window,&PinNameReq);
  703.      }
  704.  
  705.      if ((gadID >= 1) && (gadID <=24)) {
  706.        gadget = gadget->NextGadget;        /*Ende der Gadgetliste?*/
  707.        if (!gadget)                /*dann von vorne beginnen*/
  708.          gadget = RGadget4.NextGadget;
  709.        for (n=0; n<5; n++) {        /*nächstes Gadget aktivieren*/
  710.          if (ActivateGadget(gadget,window,&PinNameReq))
  711.            break;
  712.        }
  713.      }
  714.        }
  715.  
  716.      }
  717.    }
  718.  }
  719. }
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727. /*RowActive: gibt an, ob eine Zeile aktiviert oder deaktiviert ist
  728.          Überprüft PT-Bit und sucht nach Folge A * /A
  729.   Aufruf:   result = RowActive(row,colsize);
  730.   result = 0: Zeile ist deaktiviert
  731.      = 1: Zeile ist aktiviert
  732.      = 2: Zeile ist aktiviert, aber lauter 1en (VCC)
  733.   row:     Zeile die überprüft werden soll
  734. */
  735. int RowActive(row)
  736. int row;
  737. {
  738. int n, colsize, flag;
  739.  
  740.  if (JedecGALType == GAL16V8)
  741.    colsize   = MAX_FUSE_ADR16+1;
  742.  else
  743.    colsize   = MAX_FUSE_ADR20+1;
  744.  
  745.  if (!Jedec.GALPT[row])                /*PT-Bit überprüfen*/
  746.    return(0);
  747.  
  748.  flag = 0;
  749.  for (n=0; n<colsize; n++) {            /*nach "A * /A" suchen*/
  750.    if (!Jedec.GALLogic[row*colsize+n]) {
  751.      flag = 1;
  752.      if (!(n % 2))
  753.        if (!Jedec.GALLogic[row*colsize+n+1])
  754.          return(0);
  755.    }
  756.  }
  757.  
  758.  if (flag)
  759.    return(1);
  760.  else
  761.    return(2);
  762. }
  763.  
  764.  
  765.  
  766.  
  767.  
  768. /*OLMCOutput: gibt an, ob OLMC als Ausgang programmiert ist
  769.   Aufruf:     result = OLMCOutput(olmc);
  770.             olmc:    die zu testende OLMC
  771.           mode:    Modus, in dem sich das GAL befindet
  772.   Ergebnis:   result = 0:  kein Ausgang
  773.                 = 1:  Ausgang (enthält sinnvolle Gleichung)
  774. */
  775. int OLMCOutput(olmc, mode)
  776. int olmc, mode;
  777. {
  778. int n, flag;
  779.  
  780.  if ((mode == 1) && (Jedec.GALAC1[olmc]))
  781.    return(0);
  782.  
  783.  flag = 0;
  784.  for (n=0; n<8; n++) {
  785.    if (!n && ((mode == 2) || ((mode == 3) && Jedec.GALAC1[olmc]))) {
  786.      if (!RowActive(olmc*8))        /*Tristatefreigabe = GND?*/
  787.        return(0);            /*ja, dann Eingang*/
  788.    }
  789.    else {
  790.      if (RowActive(olmc*8+n))
  791.        flag = 1;
  792.    }
  793.  }
  794.  
  795.  return(flag);
  796. }
  797.  
  798.  
  799. /*MakeEquation: erstellt aus den angegebenen Zeilen der JEDEC-Struktur
  800.         die entsprechende Gleichung
  801.   Aufruf:     result = MakeEquation(buff, olmc, colsize, mode, numofrows);
  802.  
  803.   Ergebnis:   result =  0: alles o.k.
  804.                 = -1: Fehler, kein Speicher mehr
  805. */
  806. int MakeEquation(buff, olmc, colsize, mode, rowoffset, numofrows)
  807. struct ActBuffer *buff;
  808. int olmc,colsize, mode, rowoffset, numofrows;
  809. {
  810. int    ORflag, ANDflag, pin, m, n, result, numofchar;
  811. struct    ActBuffer  startbuff;
  812.  
  813.  
  814.  startbuff = *buff;                /*Zeiger merken*/
  815.  
  816.  numofchar = 8;
  817.  n = rowoffset;
  818.  
  819.  ORflag = 0;
  820.  while (n < numofrows) {
  821.    result = RowActive(olmc*8 + n);
  822.    if (result == 1) {                /*enthält die Zeile etwas*/
  823.      if (ORflag) {                /*Sinnvolles? ja, dann OR*/
  824.        if (AddString(buff," + "))
  825.      return(-1);
  826.        numofchar += 3;                /*Zeichen mitzählen*/
  827.      }
  828.      ORflag  = 1;
  829.      ANDflag = 0;
  830.      for (m=0; m<colsize; m++) {
  831.        if (!Jedec.GALLogic[(olmc*8+n)*colsize+m]) {
  832.          if (ANDflag) {
  833.            if (AddByte(buff,'*'))            /*Produkterm auswerten*/
  834.           return(-1);
  835.        numofchar++;
  836.          }
  837.          ANDflag = 1;
  838.          if (JedecGALType == GAL16V8) {        /*GAL16V8*/
  839.            if (mode == 1)                /*Pinnummer aus der*/
  840.           pin = FuseToPin16Mode1[m/2];        /*Spaltennummer bes-*/
  841.            if (mode == 2)                /*stimmen*/
  842.          pin = FuseToPin16Mode2[m/2];
  843.            if (mode == 3)
  844.          pin = FuseToPin16Mode3[m/2];
  845.        if (((PinNames16[pin-1][0] == '/') && !(m % 2)) || /*Negation in*/
  846.            ((PinNames16[pin-1][0] != '/') &&  (m % 2))) { /*Pindek. be-*/
  847.          if (AddByte(buff,'/'))                  /*rücksichtigen*/
  848.            return(-1);
  849.          numofchar++;
  850.        }
  851.        if (PinNames16[pin-1][0] == '/') {   /*Pinnamen ohne '/' schreiben*/
  852.          if (AddString(buff,&PinNames16[pin-1][1]))
  853.                return(-1);
  854.        }
  855.        else {
  856.          if (AddString(buff,PinNames16[pin-1]))
  857.                return(-1);
  858.        }
  859.        numofchar += (int)strlen(PinNames16[pin-1]);
  860.          }
  861.          if (JedecGALType == GAL20V8) {        /*GAL20V8*/
  862.            if (mode == 1)                /*Pinnummer aus der*/
  863.           pin = FuseToPin20Mode1[m/2];        /*Spaltennummer bes-*/
  864.            if (mode == 2)                /*stimmen*/
  865.          pin = FuseToPin20Mode2[m/2];
  866.            if (mode == 3)
  867.          pin = FuseToPin20Mode3[m/2];
  868.        if (((PinNames20[pin-1][0] == '/') && !(m % 2)) || /*Negation in*/
  869.            ((PinNames20[pin-1][0] != '/') &&  (m % 2))) { /*Pindek. be-*/
  870.          if (AddByte(buff,'/'))                  /*rücksichtigen*/
  871.            return(-1);
  872.          numofchar++;
  873.        }
  874.        if (PinNames20[pin-1][0] == '/') {   /*Pinnamen ohne '/' schreiben*/
  875.          if (AddString(buff,&PinNames20[pin-1][1]))
  876.                return(-1);
  877.        }
  878.        else {
  879.          if (AddString(buff,&PinNames20[pin-1][0]))
  880.                return(-1);
  881.        }
  882.        numofchar += (int)strlen(&PinNames20[pin-1][0]);
  883.          }
  884.      if (numofchar > 60) {                /*neue Zeile?*/
  885.        if (AddString(buff,"\n        "))
  886.          return(-1);
  887.        numofchar = 8;
  888.      }
  889.        }
  890.      }
  891.    }
  892.    if (result == 2) {            /*nur 1en in der Zeile, dann*/
  893.      *buff = startbuff;            /*liegt VCC vor*/
  894.      if (AddString(buff,"VCC"))
  895.        return(-1);
  896.        break;
  897.    }
  898.    n++;
  899.  }
  900.  if (AddString(buff,"\n\n"))            /*Gleichungsende*/
  901.    return(-1);
  902.  
  903.  return(0);
  904. }
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912. /*Reasm: Erstellt aus der Jedec-Struktur wieder die Eingabe-Datei. Diese
  913.      wird in "buff" abelegt.
  914.   Aufruf: result = Reasm(buff);
  915.         buff: ActBuffer-Struktur für Speicher, in dem das File abgelegt
  916.         werden soll
  917.   Ergebnis: result = 0:     alles o.k.
  918.            = sonst: Fehler
  919. */
  920. int Reasm(buff)
  921. struct    ActBuffer buff;
  922. {
  923. int    mode, n, numofpins, byte;
  924. int    olmc, colsize;
  925. int    tricon[8];
  926.  
  927.  
  928.  if (JedecGALType == GAL16V8) {        /*GAL-Typ bestimmen*/
  929.    if (AddString(&buff,"GAL16V8\n"))
  930.      return(-1);
  931.    numofpins = 20;
  932.    colsize   = MAX_FUSE_ADR16+1;
  933.  }
  934.  else {
  935.    if (AddString(&buff,"GAL20V8\n"))
  936.      return(-1);
  937.    numofpins = 24;
  938.    colsize   = MAX_FUSE_ADR20+1;
  939.  }
  940.  
  941.  byte = 0;                /*Signatur erstellen*/
  942.  for (n=0; n<SIG_SIZE; n++) {
  943.    byte |= Jedec.GALSig[n];            /*8 Bits zu einem Byte*/
  944.    if (!((n+1)%8)) {                /*zusammenfügen*/
  945.      if (!isprint(byte))
  946.        byte = '.';
  947.      if (AddByte(&buff,byte))
  948.        return(-1);
  949.      byte = 0;
  950.     }
  951.    byte <<= 1;
  952.  } 
  953.  if (AddString(&buff,"\n\n"))
  954.    return(-1);
  955.  
  956.                     /*Pinnamen erstellen*/
  957.  for (n=1; n<=numofpins; n++) {
  958.    if (JedecGALType == GAL16V8)
  959.      if (AddString(&buff,&PinNames16[n-1][0]))
  960.        return(-1);
  961.    if (JedecGALType == GAL20V8)
  962.      if (AddString(&buff,PinNames20[n-1]))
  963.        return(-1);
  964.    if (n == numofpins/2) {
  965.      if (AddString(&buff,"\n"))
  966.        return(-1);
  967.    }
  968.    else {
  969.      if (AddString(&buff," "))
  970.        return(-1);
  971.    }
  972.  }
  973.  
  974.  if (AddString(&buff,"\n\n"))
  975.    return(-1);
  976.  
  977.  
  978.  
  979.  if (!Jedec.GALAC0 && !Jedec.GALSYN) {    /*Modus überprüfen*/
  980.    ReasmError(1,0);                /*Fehler, dann Ende*/
  981.    return(1);
  982.  }
  983.                     /*Modus bestimmen*/
  984.  if (!Jedec.GALSYN) {                /*Wenn SYN = 0, dann Mode 3*/
  985.    mode = 3;                    /*Register-Modus*/
  986.  }
  987.  else {
  988.    if (Jedec.GALSYN && Jedec.GALAC0)
  989.      mode = 2;                    /*Tristate-Modus*/
  990.    else
  991.       mode = 1;                    /*kombinatorische Ausgänge*/
  992.  }
  993.  
  994.  for (n=0; n<8; tricon[n++]=0);        /*Merker für Ausgänge mit Tristate-*/
  995.                     /*kontrolle initialisieren*/
  996.  
  997.                     /*Gleichungen erstellen*/
  998.  for (olmc=0; olmc<8; olmc++) {            /*8 OLMCs vorhanden*/
  999.    if (OLMCOutput(olmc,mode)) {            /*OLMC als Ausgang?*/
  1000.  
  1001.      if (JedecGALType == GAL16V8) {
  1002.                       /*Negation in Pindek. berücksichtigen*/
  1003.        if (((PinNames16[19-olmc-1][0] == '/') && Jedec.GALXOR[olmc]) ||
  1004.        ((PinNames16[19-olmc-1][0] != '/') && !Jedec.GALXOR[olmc])) {
  1005.      if (AddByte(&buff,'/'))
  1006.        return(-1);
  1007.        }
  1008.  
  1009.        if (PinNames16[19-olmc-1][0] == '/') {   /*Pinnamen ohne '/' schreiben*/
  1010.      if (AddString(&buff,&PinNames16[19-olmc-1][1]))
  1011.            return(-1);
  1012.        }
  1013.        else {
  1014.      if (AddString(&buff,PinNames16[19-olmc-1]))
  1015.            return(-1);
  1016.        }
  1017.      }
  1018.  
  1019.      if (JedecGALType == GAL20V8) {
  1020.                       /*Negation in Pindek. berücksichtigen*/
  1021.        if (((PinNames20[22-olmc-1][0] == '/') && Jedec.GALXOR[olmc]) ||
  1022.        ((PinNames20[22-olmc-1][0] != '/') && !Jedec.GALXOR[olmc])) {
  1023.      if (AddByte(&buff,'/'))
  1024.        return(-1);
  1025.        }
  1026.  
  1027.        if (PinNames20[22-olmc-1][0] == '/') {   /*Pinnamen ohne '/' schreiben*/
  1028.      if (AddString(&buff,&PinNames20[22-olmc-1][1]))
  1029.            return(-1);
  1030.        }
  1031.        else {
  1032.      if (AddString(&buff,PinNames20[22-olmc-1]))
  1033.            return(-1);
  1034.        }
  1035.      }
  1036.  
  1037.      if ((mode == 2) || ((mode == 3) && (Jedec.GALAC1[olmc]))) {
  1038.        if (AddString(&buff,".T"))
  1039.          return(-1);
  1040.        tricon[olmc] = 1;            /*Merker setzen, daß Tri.-*/
  1041.      }                        /*kontrolle vorhanden ist*/
  1042.  
  1043.      if ((mode == 3) && (!Jedec.GALAC1[olmc]))
  1044.        if (AddString(&buff,".R"))
  1045.          return(-1);
  1046.  
  1047.      if (AddString(&buff," = "))
  1048.        return(-1);
  1049.  
  1050.      n = 0;
  1051.      if ((mode == 2) || ((mode == 3) && Jedec.GALAC1[olmc])) /*bei Tri.*/
  1052.        n++;                   /*die erste Zeile überspringen*/
  1053.      if (MakeEquation(&buff, olmc, colsize, mode, n, 8))
  1054.        return(-1);
  1055.    }
  1056.  }
  1057.  
  1058.                 /*Tristate-Kontrolle erzeugen*/
  1059.  for (olmc=0; olmc<8; olmc++) {
  1060.    if (tricon[olmc]) {
  1061.      if (JedecGALType == GAL16V8) {
  1062.        if (PinNames16[19-olmc-1][0] == '/') {   /*Pinnamen ohne '/' schreiben*/
  1063.      if (AddString(&buff,&PinNames16[19-olmc-1][1]))
  1064.            return(-1);
  1065.        }
  1066.        else {
  1067.      if (AddString(&buff,PinNames16[19-olmc-1]))
  1068.            return(-1);
  1069.        }
  1070.      }
  1071.      if (JedecGALType == GAL20V8) {
  1072.        if (PinNames20[22-olmc-1][0] == '/') {   /*Pinnamen ohne '/' schreiben*/
  1073.      if (AddString(&buff,&PinNames20[22-olmc-1][1]))
  1074.            return(-1);
  1075.        }
  1076.        else {
  1077.      if (AddString(&buff,PinNames20[22-olmc-1]))
  1078.            return(-1);
  1079.        }
  1080.      }
  1081.      if (AddString(&buff,".E"))            /*Tristate-Freigabe*/
  1082.        return(-1);
  1083.      if (AddString(&buff," = "))
  1084.        return(-1);
  1085.  
  1086.      if (MakeEquation(&buff, olmc, colsize, mode, 0, 1))
  1087.        return(-1);
  1088.    }
  1089.  }
  1090.  
  1091.  
  1092.                     /*Abschlußtext schreiben*/
  1093.  if (AddString(&buff,"DESCRIPTION:\nThis file is reassembled. Used JEDEC-File: '"))
  1094.    return(-1);
  1095.  if (AddString(&buff,&filename[0]))
  1096.    return(-1);
  1097.  if (AddString(&buff,"'\n\n"))
  1098.    return(-1);
  1099.  
  1100.  return(0);                /*kein Fehler aufgetreten, fertig*/
  1101. }
  1102.  
  1103.  
  1104.  
  1105.  
  1106. /*Reassembler: Jedec-File in Source-File zurückverwandeln
  1107. */
  1108. void Reassembler()
  1109. {
  1110. struct    Buffer        *reasm_buff;
  1111. struct    ActBuffer    mybuff;
  1112. struct    FileHandle    *fh;
  1113. UBYTE    *filebuffer, *filebuffer2;
  1114. int    result;
  1115.  
  1116.  if (MyFileReq((char *)"load JEDEC file", (char *)".jed",YES)) {
  1117.    if (!(GetJedec(&path[0]))) {        /*JEDEC-File holen*/
  1118.  
  1119.      if (PinNameRequester(JedecGALType))
  1120.        return;
  1121.  
  1122.  
  1123.      if (!(reasm_buff = (struct Buffer *)AllocMem((long)sizeof(struct Buffer),MEMF_PUBLIC|MEMF_CLEAR))) {
  1124.        ErrorReq(2);            /*kein Speicher mehr->Fehlermeldung*/
  1125.        return;
  1126.      }
  1127.      mybuff.ThisBuff = reasm_buff;
  1128.      mybuff.Entry    = (UBYTE *)(&reasm_buff->Entries[0]);
  1129.      mybuff.BuffEnd  = (UBYTE *)reasm_buff + (long)sizeof(struct Buffer);
  1130.  
  1131.  
  1132.      if (!Reasm(mybuff) && MyFileReq((char *)"save source file", (char *)".pld", YES)) {
  1133.        PrintText((UBYTE *)"saving source file...",1);
  1134.        if ((fh = Open(&path[0], MODE_NEWFILE))) {
  1135.          for (;;) {
  1136.        filebuffer = filebuffer2 = mybuff.Entry;
  1137.  
  1138.        while (filebuffer2 < mybuff.BuffEnd) {    /*Größe des Puffers bestimmen*/
  1139.          if (!*filebuffer2) 
  1140.            break;
  1141.              filebuffer2++;
  1142.        }
  1143.                         /*Puffer schreiben*/
  1144.        result = Write(fh, filebuffer, (long)(filebuffer2-filebuffer));
  1145.        if (result == -1L) {            /*Fehler beim Schreiben?*/
  1146.          Close(fh);                /*ja, dann Ende*/
  1147.          FreeBuffer(reasm_buff);
  1148.          PrintText((UBYTE *)" Error! ",0);
  1149.          ErrorReq(13);
  1150.          return;
  1151.        }
  1152.  
  1153.        if (!mybuff.ThisBuff->Next)        /*noch ein Puffer da?*/
  1154.          break;                    /*nein, dann for(;;)-Ende*/
  1155.        mybuff.ThisBuff = mybuff.ThisBuff->Next;
  1156.        mybuff.Entry    = (UBYTE *)(&mybuff.ThisBuff->Entries[0]);
  1157.        mybuff.BuffEnd  = (UBYTE *)mybuff.ThisBuff + (long)sizeof(struct Buffer);
  1158.          }
  1159.          Close(fh);
  1160.        }
  1161.        else {
  1162.          FreeBuffer(reasm_buff);        /*Fehler?, dann Abbruch*/
  1163.          PrintText((UBYTE *)" Error! ",0);
  1164.          ErrorReq(13);            /*Datei läßt sich nicht öffnen*/
  1165.          return;
  1166.        }
  1167.  
  1168.        PrintText((UBYTE *)" o.k.",0);
  1169.      }
  1170.      FreeBuffer(reasm_buff);            /*Speicher freigeben*/
  1171.    }
  1172.  }
  1173. }
  1174.  
  1175.  
  1176.  
  1177. /* gibt Fehlermeldungen des Reassemblers aus und gibt Speicher frei
  1178. */
  1179. void ReasmError(errornum, pinnum)
  1180. int    errornum, pinnum;
  1181. {
  1182. UBYTE    *txtptr;
  1183.  
  1184.  switch (errornum) {
  1185.    case  1:
  1186.      MyRequest(ERR_REQ,(UBYTE *)"Reassembler error!");
  1187.      PrintText((UBYTE *)"Mode AC0 = SYN = 0 is not supported",1);
  1188.      break;
  1189.    case  2:
  1190.      txtptr = (UBYTE *)"Pin xx: pinname defined twice";
  1191.      sprintf(txtptr+4L,"%2d",pinnum);
  1192.      *(txtptr+6L) = ':';
  1193.      MyRequest(ERR_REQ,txtptr);
  1194.      break;
  1195.    case  3:
  1196.      txtptr = (UBYTE *)"Pin xx: illegal character";
  1197.      sprintf(txtptr+4L,"%2d",pinnum);
  1198.      *(txtptr+6L) = ':';
  1199.      MyRequest(ERR_REQ,txtptr);
  1200.      break;
  1201.    case  4:
  1202.      txtptr = (UBYTE *)"Pin xx: no pinname found";
  1203.      sprintf(txtptr+4L,"%2d",pinnum);
  1204.      *(txtptr+6L) = ':';
  1205.      MyRequest(ERR_REQ,txtptr);
  1206.      break;
  1207.    case  5:
  1208.      txtptr = (UBYTE *)"Pin xx: VCC/GND at wrong pin";
  1209.      sprintf(txtptr+4L,"%2d",pinnum);
  1210.      *(txtptr+6L) = ':';
  1211.      MyRequest(ERR_REQ,txtptr);
  1212.      break;
  1213.    case  6:
  1214.      txtptr = (UBYTE *)"Pin xx: illegal use of '/'";
  1215.      sprintf(txtptr+4L,"%2d",pinnum);
  1216.      *(txtptr+6L) = ':';
  1217.      MyRequest(ERR_REQ,txtptr);
  1218.      break;
  1219.    case  7:
  1220.      txtptr = (UBYTE *)"Pin xx: GND expected";
  1221.      sprintf(txtptr+4L,"%2d",pinnum);
  1222.      *(txtptr+6L) = ':';
  1223.      MyRequest(ERR_REQ,txtptr);
  1224.      break;
  1225.    case  8:
  1226.      txtptr = (UBYTE *)"Pin xx: VCC expected";
  1227.      sprintf(txtptr+4L,"%2d",pinnum);
  1228.      *(txtptr+6L) = ':';
  1229.      MyRequest(ERR_REQ,txtptr);
  1230.      break;
  1231.  
  1232.  }
  1233. }
  1234.  
  1235.  
  1236.  
  1237.  
  1238.